package com.example.androidlearning2200;

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;

import com.example.androidlearning2200.adapter.BannerAdapter;
import com.example.androidlearning2200.bean.BannerBean;
import com.example.androidlearning2200.http.HttpCallback;
import com.example.androidlearning2200.http.HttpResponse;
import com.example.androidlearning2200.http.HttpUtil;
import com.example.androidlearning2200.utils.NetUtil;
import com.example.androidlearning2200.utils.SQLUtil;
import com.google.gson.Gson;
import com.google.gson.internal.LinkedTreeMap;

import java.util.ArrayList;
import java.util.List;

import me.relex.circleindicator.CircleIndicator;

/**
 * 本案例主要有以下几个步骤：
 * 1. 通过ViewPager和CircleIndicator来实现Banner轮播图的功能
 * 2. 通过HttpUtil中的通用网络请求工具类，获取Banner数据，返回Json格式数据；
 * 3. 将Json格式数据通过Gson解析成List<LinkedTreeMap>，供ViewPager的Adapter使用
 * 4. 在ViewPager的Adapter，通过Glide获取网络图片设置给ImageView
 */
public class WanAndroidActivity extends AppCompatActivity {

    private SQLiteDatabase sd;
    private ViewPager vpBanner;//采用ViewPager实现Banner轮播图
    private CircleIndicator indicator;// 圆点指示器

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wan_android);
        initDatabase();
        vpBanner = findViewById(R.id.vpBanner);
        indicator = findViewById(R.id.indicator);
        // 判断网络是否可用
        if (NetUtil.isNetworkAvailable(WanAndroidActivity.this)) {
            // 可用，从网络读取数据
            Log.d("TAG", "网络可用，从网络获取数据");
            getBannerFromHttp();
        } else {
            // 不可用，从本地读取数据
            Log.d("TAG", "网络不可用，从本地读取数据");
            getBannerFromSQL();
        }
    }

    /**
     * 初始化数据库
     */
    private void initDatabase() {
        sd = SQLiteDatabase.openOrCreateDatabase("/data/data/com.example.androidlearning2200/banner.db", null);
        // 如果表不存在，则创建表
        if (SQLUtil.doesTableExist(sd, "table_banner") == false) {
            // 建表的sql语句
            String sqlCreateTable = "create table table_banner(_id integer primary key autoincrement,title text,imagePath text)";
            // 执行sql语句
            sd.execSQL(sqlCreateTable);
        }
    }

    /**
     * 查询Banner数据
     */
    private void getBannerFromSQL() {
        List<BannerBean> bannerBeans = new ArrayList<>();
        Cursor cursor = sd.query("table_banner", null, null, null, null, null, null);
        while (cursor.moveToNext()) {
            String title = cursor.getString(1);
            String imagePath = cursor.getString(2);
            bannerBeans.add(new BannerBean(title, imagePath));
        }
        cursor.close();
        vpBanner.setAdapter(new BannerAdapter(WanAndroidActivity.this, bannerBeans));
        indicator.setViewPager(vpBanner);
    }

    /**
     * 从网络获取Banner数据
     */
    private void getBannerFromHttp() {
        HttpUtil.doGet("https://www.wanandroid.com/banner/json", jsonStr -> {
            List<BannerBean> bannerBeans = new ArrayList<>();
            Gson gson = new Gson();
            HttpResponse<List<LinkedTreeMap>> httpResponse = gson.fromJson(jsonStr, HttpResponse.class);
            List<LinkedTreeMap> datas = httpResponse.getData();
            // 清空数据表
            SQLUtil.clearTable(sd, "table_banner");
            for (LinkedTreeMap map : datas) {
                String title = (String) map.get("title");
                String imagePath = (String) map.get("imagePath");
                bannerBeans.add(new BannerBean(title, imagePath));
                // 把数据存到数据库
                String sqlInsertData = "insert into table_banner(title,imagePath) values('" + title + "','" + imagePath + "')";
                sd.execSQL(sqlInsertData);
            }
            runOnUiThread(() -> {
                vpBanner.setAdapter(new BannerAdapter(WanAndroidActivity.this, bannerBeans));
                indicator.setViewPager(vpBanner);
            });
        });
    }
}